﻿//===================================================================================
// Copyright (c) Ryan Garrett.  All rights reserved.
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY
// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT
// LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
// FITNESS FOR A PARTICULAR PURPOSE.
//===================================================================================

using System;
using Caffeine.Core.Test.TestModel;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace Caffeine.Core.Test
{
    [TestClass]
    public class ModelBaseExtensionsTester
    {
        [TestMethod]
        public void CheckIsValidBaseTypeOrInterfaceTest()
        {
            Assert.IsFalse(ModelBaseExtensions.CheckIsValidModelSubType(typeof(Object)));
            Assert.IsFalse(ModelBaseExtensions.CheckIsValidModelSubType(typeof(ModelBase)));
            Assert.IsFalse(ModelBaseExtensions.CheckIsValidModelSubType(typeof(Decimal)));
            Assert.IsFalse(ModelBaseExtensions.CheckIsValidModelSubType(typeof(EnumForTesting)));
            Assert.IsFalse(ModelBaseExtensions.CheckIsValidModelSubType(typeof(Nullable<EnumForTesting>)));
            Assert.IsTrue(ModelBaseExtensions.CheckIsValidModelSubType(typeof(ModelA)));
            Assert.IsTrue(ModelBaseExtensions.CheckIsValidModelSubType(typeof(ModelB<String>)));
            Assert.IsTrue(ModelBaseExtensions.CheckIsValidModelSubType(typeof(ModelC<EnumForTesting>)));
            Assert.IsTrue(ModelBaseExtensions.CheckIsValidModelSubType(typeof(ModelC<>)));
            Assert.IsTrue(ModelBaseExtensions.CheckIsValidModelSubType(typeof(ModelC<Char>)));
            Assert.IsTrue(ModelBaseExtensions.CheckIsValidModelSubType(typeof(ModelC<Int32>)));
            Assert.IsTrue(ModelBaseExtensions.CheckIsValidModelSubType(typeof(ModelA)));
            Assert.IsTrue(ModelBaseExtensions.CheckIsValidModelSubType(typeof(ModelB<Int32>)));
            Assert.IsTrue(ModelBaseExtensions.CheckIsValidModelSubType(typeof(ModelB<>)));
        }
    }
}
